package com.itheima.controll;

import com.itheima.PoJo.Address;
import com.itheima.PoJo.Result;
import com.itheima.PoJo.User;

import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpServletRequest;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;

@RestController
public class RequestController {
    //1.简单参数
    //使用原始方法获取前端数据并响应
    //需要形参声明HttpServletRequest对象,通过对象调用getParameter方法,得到数据
    @RequestMapping("/simpleParam")
    public String simpleController(HttpServletRequest request){
        String name = request.getParameter("name");
        String age = request.getParameter("age");
        int i = Integer.parseInt(age);
        System.out.println(name+":"+age);
        return "原始方法";
    }

    //使用springboot获取前端并响应

    //请求参数名与方法参数一致,会自动转换为指定类型
    /*@RequestMapping("/simpleparam")
    public String simpleParam(String name,Integer age){
        System.out.println(name+":"+age);
        return "ok";
    }*/

    //形参要与前端传输数据的形参一样,否则需要映射 @RequestParam
    //注解中的required属性默认为true,必须请求参数必须传递
    @RequestMapping("/simpleparam")
    public String simpleParam( @RequestParam(name = "name")String username, Integer age){
        System.out.println(username+":"+age);
        return "ok";
    }

    //2.实体参数(不能直接使用基本数据类型进行描述)
    @RequestMapping("/simolePojo")
    public String simplePojo(User user){
        System.out.println(user);
        return "实体参数";
    }

    //3.复杂实体参数错误示范:数据是分散的,不便于数据管理
   /* @RequestMapping("/complexPojo")
    public String complexPojo(User user, Address address){
        System.out.println(user+" "+address);
        return "complexPojo";
    }*/

    //在User中声明Address对象,通过User对象可以一步到位
    @RequestMapping("/complexPojo")
    public String complexPojo(User user){
        System.out.println(user);
        return "complexPojo";
    }

    //4.数组集合参数
    @RequestMapping("/arrayPojo")
    public String arrayPojo(String[]hobby){
        System.out.println(Arrays.toString(hobby));
        return "array";
    }
    //集合参数获取,需要@RequestParam注解,绑定参数
    @RequestMapping("/ListPojo")
    public String ListPojo( @RequestParam ArrayList<String>actor){
        System.out.println(actor);
        return "Arraylist";
    }
    //5.日期参数,使用注解@DateTimeFormat(省去接受数据,手动格式化日期对象)
    @RequestMapping("/dateParam")
    public String dateParam2(@DateTimeFormat(pattern ="yyyy-MM-dd HH:mm:ss") LocalDateTime localDateTime){
        System.out.println(localDateTime);
        return "localDateTime";
    }
    //6.json参数
    //使用注解@RequestBody,将JSON数据封装进类,JSON数据的键名要与类中属性名一样
    @RequestMapping("/jsonParam")
    public String jsonParam(@RequestBody User user){
        System.out.println(user);
        return "json";
    }

    //7.路径参数,请求参数同时也是路径的一部分
    //使用注解@PathVariable,将请求数据作为路径的一部分
    @RequestMapping("/pathParam/{id}")
    public String pathParam(@PathVariable Integer id){
        System.out.println(id);
        return "path";
    }
    //8.多个路径参数
    @RequestMapping("/pathParam/{id}/{name}")
    public String pathParam(@PathVariable Integer id,@PathVariable String name){
        System.out.println(id+"/"+name);
        return "more path";
    }

}
